package org.example.jvm.classloader;

import javax.swing.*;

public class ClassLoaderTest {
    public static void main(String[] args) {

        //获取系统类加载器，输出AppClassLoader，说明系统类加载器就是应用程序类加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2

        //获取系统类加载器的上层：输出ExtClassLoader，说明系统类加载器的上层是扩展类加载器
        ClassLoader extClassLoader = systemClassLoader.getParent();
        System.out.println(extClassLoader);//sun.misc.Launcher$ExtClassLoader@1540e19d

        //获取扩展类加载器的上层：输出null，获取不到引导类加载器。虽然获取不到，但是扩展类加载器的上层是引导类加载器
        ClassLoader bootstrapClassLoader = extClassLoader.getParent();
        System.out.println(bootstrapClassLoader);//null

        //输出AppClassLoader。说明对于用户自定义类来说：默认使用系统类加载器进行加载
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        System.out.println(classLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2

        //打印的也是null，和获取扩展类的上层的输出是一样。可以证明String类使用引导类加载器进行加载的。扩展开来：---> Java的核心类库都是使用引导类加载器进行加载的。
        ClassLoader classLoader1 = String.class.getClassLoader();
        System.out.println(classLoader1);//null

        ClassLoader classLoader2 = ViewportLayout.class.getClassLoader();
        System.out.println(classLoader2);//null


    }
}